package common.util;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import common.bean.DeviceBean;
import common.standard.view.DeviceEnum;

import static org.apache.commons.lang3.StringUtils.isNotBlank;

/**
 * 公共的SQL条件构造工具类
 *
 * @author 杨健
 * @since 2019/7/9 14:43
 */
public final class ConditionUtil {

    private ConditionUtil() {}

    /**
     * 统一为条件构造器添加设备的查询条件
     *
     * @param queryWrapper 查询条件构造器
     * @param condition 设备条件参数
     * @param <T> 针对于表的泛型
     */
    public static<T> void addDeviceCondition(QueryWrapper<T> queryWrapper, DeviceBean condition) {
        String devCode = "devCode";
        String moduleId="moduleId";
        // 设备条件，起码要存在一个才进入判断
        if (isNotBlank(condition.getJgs())
                || isNotBlank(condition.getJg())
                || isNotBlank(condition.getJfs())
                || isNotBlank(condition.getTdd())
                || isNotBlank(condition.getDianbiao())
                || isNotBlank(condition.getMenjinhezi())
                || isNotBlank(condition.getShuibiao())) {
            queryWrapper.nested(i -> {
                // 机柜锁条件
                if (isNotBlank(condition.getJgs())) {
                    i.likeRight(devCode, DeviceEnum.CABINET_LOCK.getDeviceName());
                }
                i.or();

                // 井盖条件
                if (isNotBlank(condition.getJg())) {
                    i.likeRight(devCode, DeviceEnum.MANHOLE_COVER.getDeviceName());
                }
                i.or();

                // 机房锁条件
                if (isNotBlank(condition.getJfs())) {
                    i.likeRight(devCode, DeviceEnum.COMPUTER_LOCK.getDeviceName());
                }
                i.or();

                // 通断电条件
                if (isNotBlank(condition.getTdd())) {
                    i.likeRight(devCode, DeviceEnum.ELECTRICITY.getDeviceName());
                }
                i.or();

                // 门禁盒子条件
                if (isNotBlank(condition.getMenjinhezi())) {
                    i.eq(moduleId, 1);
                }
                i.or();

                // 电表条件
                if (isNotBlank(condition.getDianbiao())) {
                    i.eq(moduleId, 4);
                }
                i.or();

                // 水表条件
                if (isNotBlank(condition.getShuibiao())) {
                    i.eq(moduleId, 3);
                }
                i.or();

                // 水表条件
                if (isNotBlank(condition.getYangan())) {
                    i.eq(moduleId, 2);
                }

                return i;
            });
        }
    }
    /**
     * 统一为条件构造器添加设备的查询条件
     *
     * @param queryWrapper 查询条件构造器
     * @param condition 设备条件参数
     * @param <T> 针对于表的泛型
     */
    public static<T> void addRealtimeModId(QueryWrapper<T> queryWrapper, DeviceBean condition) {
        String devCode = "devCode";
        String moduleId="modId";
        // 设备条件，起码要存在一个才进入判断
        if (isNotBlank(condition.getJgs())
                || isNotBlank(condition.getJg())
                || isNotBlank(condition.getJfs())
                || isNotBlank(condition.getTdd())
                || isNotBlank(condition.getDianbiao())
                || isNotBlank(condition.getMenjinhezi())
                || isNotBlank(condition.getShuibiao())) {
            queryWrapper.nested(i -> {
                // 机柜锁条件
                if (isNotBlank(condition.getJgs())) {
                    i.likeRight(devCode, DeviceEnum.CABINET_LOCK.getDeviceName());
                }
                i.or();

                // 井盖条件
                if (isNotBlank(condition.getJg())) {
                    i.likeRight(devCode, DeviceEnum.MANHOLE_COVER.getDeviceName());
                }
                i.or();

                // 机房锁条件
                if (isNotBlank(condition.getJfs())) {
                    i.likeRight(devCode, DeviceEnum.COMPUTER_LOCK.getDeviceName());
                }
                i.or();

                // 通断电条件
                if (isNotBlank(condition.getTdd())) {
                    i.likeRight(devCode, DeviceEnum.ELECTRICITY.getDeviceName());
                }
                i.or();

                // 门禁盒子条件
                if (isNotBlank(condition.getMenjinhezi())) {
                    i.eq(moduleId, 1);
                }
                i.or();

                // 电表条件
                if (isNotBlank(condition.getDianbiao())) {
                    i.eq(moduleId, 4);
                }
                i.or();

                // 水表条件
                if (isNotBlank(condition.getShuibiao())) {
                    i.eq(moduleId, 3);
                }
                i.or();

                // 水表条件
                if (isNotBlank(condition.getYangan())) {
                    i.eq(moduleId, 2);
                }

                return i;
            });
        }
    }
    /**
     * 统一为条件构造器添加设备的查询条件
     *
     * @param queryWrapper 查询条件构造器
     * @param condition 设备条件参数
     * @param <T> 针对于表的泛型
     */
    public static<T> void addDeviceModId(QueryWrapper<T> queryWrapper, DeviceBean condition) {

        String moduleId="mod_Id";
        // 设备条件，起码要存在一个才进入判断
        if (isNotBlank(condition.getDianbiao())
                || isNotBlank(condition.getMenjinhezi())
                || isNotBlank(condition.getShuibiao())
                || isNotBlank(condition.getYangan())) {
            queryWrapper.nested(i -> {

                // 门禁盒子条件
                if (isNotBlank(condition.getMenjinhezi())) {
                    i.eq(moduleId, 1);
                }
                i.or();

                // 电表条件
                if (isNotBlank(condition.getDianbiao())) {
                    i.eq(moduleId, 4);
                }
                i.or();

                // 水表条件
                if (isNotBlank(condition.getShuibiao())) {
                    i.eq(moduleId, 3);
                }
                i.or();

                // 水表条件
                if (isNotBlank(condition.getYangan())) {
                    i.eq(moduleId, 2);
                }

                return i;
            });
        }
    }
}
